//
//  ViewController.m
//  NSFileHandle使用
//
//  Created by Xie Wei on 2019/7/16.
//  Copyright © 2019 Xie Wei. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()

@property (nonatomic, strong) NSString *fullPath;

@property (nonatomic, strong) NSString *outPath;

@end

@implementation ViewController

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    [self test3];
}

/**
 追加数据
 */
- (void)test1 {
    // 打开文件准备更新
    NSFileHandle *fileHandle = [NSFileHandle fileHandleForUpdatingAtPath:self.fullPath];
    
    // 移动文件句柄到文件末尾
    [fileHandle seekToEndOfFile];
    
    NSString *addString = @"追加的数据";
    NSData *addData = [addString dataUsingEncoding:NSUTF8StringEncoding];
    
    // 写数据到文件
    [fileHandle writeData:addData];
    
    // 释放文件句柄
    [fileHandle closeFile];
}

/**
 定位数据
 */
- (void)test2 {
    // 打开一个文件准备读取
    NSFileHandle *fileHandle = [NSFileHandle fileHandleForReadingAtPath:self.fullPath];
    // 从设备或通道返回可用的数据
    NSData *fileData = [fileHandle availableData];
    // 获取数据长度
    NSInteger dataLength = fileData.length;
    // 跳到指定文件的偏移量
    [fileHandle seekToFileOffset:dataLength * 0.5];
    
    // 从当前的节点读取到文件的末尾
    NSData *data = [fileHandle readDataToEndOfFile];
    
    NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    
    NSLog(@"%@", str);
    
    // 释放文件句柄
    [fileHandle closeFile];
}

/**
 复制文件
 */
- (void)test3 {
    // 打开一个文件准备读取
    NSFileHandle *outHandle = [NSFileHandle fileHandleForWritingAtPath:self.outPath];   //创建并打开要输出的文件
    // 将输出文件的长度设为0
    [outHandle truncateFileAtOffset:0];
    
    // 打开一个文件准备读取
    NSFileHandle *inHandle = [NSFileHandle fileHandleForReadingAtPath:self.fullPath];
    // 读取的缓冲数据
    NSData *buffer = [inHandle readDataToEndOfFile];
    // 写数据到文件
    [outHandle writeData:buffer];
    
    // 释放文件句柄
    [inHandle closeFile];
    [outHandle closeFile];
}

- (NSString *)fullPath {
    if (_fullPath == nil) {
        // 获得caches目录
        NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
        
        // 拼接全路径
        _fullPath = [caches stringByAppendingPathComponent:@"test.txt"];
        
        NSLog(@"%@", _fullPath);
        
        NSString *contentString = @"abcdef";
        NSData *contentData = [contentString dataUsingEncoding:NSUTF8StringEncoding];
        // 新建一个非空的文件
        /*
         参数1: 文件的路径
         参数2: 文件的内容
         参数3: 文件的属性
         */
        [[NSFileManager defaultManager] createFileAtPath:_fullPath contents:contentData attributes:nil];
    }
    return _fullPath;
}

- (NSString *)outPath {
    if (_outPath == nil) {
        // 获得caches目录
        NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
        
        // 拼接全路径
        _outPath = [caches stringByAppendingPathComponent:@"out.txt"];
        
        NSLog(@"%@", _outPath);
        
        // 新建一个空的文件
        /*
         参数1: 文件的路径
         参数2: 文件的内容
         参数3: 文件的属性
         */
        [[NSFileManager defaultManager] createFileAtPath:_outPath contents:nil attributes:nil];
    }
    return _outPath;
}


@end
